/* Copyright(C) 2025. Huawei Technologies Co.,Ltd. All rights reserved.
   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

   http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
*/

// Package common constants
package common

const (
	// Hex hexadecimal
	Hex = 16
)

// board id
const (
	// A300IA2BoardId board id of A300I A2 32GB
	A300IA2BoardId = 0x28
	// A300IA2GB64BoardId board id of A300I A2 64GB
	A300IA2GB64BoardId = 0x29
	// A800IA2NoneHccsBoardIdOld is the boardid of a800i a2 device, 0x33 is server without hccs
	A800IA2NoneHccsBoardIdOld = 0x33
	// A800IA2NoneHccsBoardId 0x33 changed to 0x3c, and compatible with the old boardId, since 2024.9.4
	A800IA2NoneHccsBoardId = 0x3c
	// EmptyBoardId is the boardid of device before initialized
	EmptyBoardId = 0x00
)

// device usage
const (
	// Infer means device for inference
	Infer = "infer"
	// Train means device for training
	Train = "train"
)

// ring related
const (
	// Ascend910RingsNum indicates the number of devices in a ring
	Ascend910RingsNum = 4
	// Ascend910BRingsNumTrain indicates the number of devices in a ring
	Ascend910BRingsNumTrain = 8
	// Ascend910A3RingsNum indicates the number of 910A3 associated npu
	Ascend910A3RingsNum = 2
	// NoRingNum indicates the number of associated npu without ring
	NoRingNum = 1
	// OtherCardIncrease 910A3 related card increase factor
	OtherCardIncrease = 1
	// Device910A3Id0 device 0 of card
	Device910A3Id0 = 0 // die id 0 of A3 card
	// Device910A3Id1 device 1 of card
	Device910A3Id1 = 1 // die id 1 of A3 card
	// A200TA2RingsNum indicates the number of devices in a ring
	A200TA2RingsNum = 16

	// ProductTypeAtlas300IDuo product type Atlas 300I Duo, twins 310P
	ProductTypeAtlas300IDuo = "Atlas 300I Duo"
)

// fault related
const (
	// NotHandleFault not handle fault
	NotHandleFault = "NotHandleFault"
	// RestartRequest restart request
	RestartRequest = "RestartRequest"
	// RestartBusiness restart business
	RestartBusiness = "RestartBusiness"
	// FreeRestartNPU wait free and restart NPU
	FreeRestartNPU = "FreeRestartNPU"
	// RestartNPU restart NPU
	RestartNPU = "RestartNPU"
	// SeparateNPU separate NPU
	SeparateNPU = "SeparateNPU"
	// NormalNPU normal NPU
	NormalNPU = "NormalNPU"
	// UnknownLevel unknown level
	UnknownLevel = "Unknown"

	// FaultRecover device fault recover
	FaultRecover = int8(0)
	// FaultOccur device fault occur
	FaultOccur = int8(1)
	// FaultOnce once device fault
	FaultOnce = int8(2)
)

// StatusInfoFile status info file
const StatusInfoFile = "/tmp/status.json"

// container pause and resume strategy
const (
	// NeverStrategy never deal
	NeverStrategy = "never"
	// SingleStrategy deal single container and device
	SingleStrategy = "singleRecover"
	// RingStrategy deal container and device on ring
	RingStrategy = "ringRecover"
)

// container status
const (
	// StatusRunning container is running
	StatusRunning = "running"
	// StatusPausing container is pausing
	StatusPausing = "pausing"
	// StatusPaused container is paused
	StatusPaused = "paused"
	// StatusResuming container is resuming
	StatusResuming = "resuming"
)

// display description
const (
	// DescNormal container is runnig, normal description
	DescNormal = "normal"
	// DescUnknown container status is not in cache, unknown description
	DescUnknown = "unknown"
)

// device status
const (
	// StatusIgnorePause device ignore pause
	StatusIgnorePause = "ignore"
	// StatusNeedPause device need pause
	StatusNeedPause = "needPause"
)

// container runtime mode
const (
	DockerMode     = "docker"
	ContainerDMode = "containerd"
)
